package com.example.stockholdtrack.data

import java.util.*

object TradingTimeUtils {
    
    /**
     * 判断当前是否为A股交易时间
     * 交易时间：周一至周五 9:30-11:30, 13:00-15:00
     */
    fun isTradingTime(): Boolean {
        val calendar = Calendar.getInstance()
        val dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK)
        
        // 周末不交易
        if (dayOfWeek == Calendar.SATURDAY || dayOfWeek == Calendar.SUNDAY) {
            return false
        }
        
        val hour = calendar.get(Calendar.HOUR_OF_DAY)
        val minute = calendar.get(Calendar.MINUTE)
        val currentTime = hour * 100 + minute // 转换为HHMM格式
        
        // 上午交易时间：9:30-11:30
        val morningStart = 930
        val morningEnd = 1130
        
        // 下午交易时间：13:00-15:00
        val afternoonStart = 1300
        val afternoonEnd = 1500
        
        return (currentTime >= morningStart && currentTime <= morningEnd) ||
               (currentTime >= afternoonStart && currentTime <= afternoonEnd)
    }
    
    /**
     * 获取当前应该使用的更新间隔（毫秒）
     */
    fun getUpdateInterval(): Long {
        return if (isTradingTime()) {
            500L // 交易时间：500毫秒（0.5秒）
        } else {
            60000L // 非交易时间：60秒（1分钟）
        }
    }
    
    /**
     * 获取当前交易状态描述
     */
    fun getTradingStatus(): String {
        return if (isTradingTime()) {
            "交易中"
        } else {
            "非交易时间"
        }
    }
    
    /**
     * 判断是否应该继续更新价格
     * 非交易时间首次获取后停止，交易时间持续更新
     */
    fun shouldContinueUpdating(hasInitialData: Boolean): Boolean {
        return if (isTradingTime()) {
            true // 交易时间持续更新
        } else {
            !hasInitialData // 非交易时间只有首次获取数据
        }
    }
    
    /**
     * 获取距离下次交易时间的分钟数
     */
    fun getMinutesToNextTrading(): Int {
        val calendar = Calendar.getInstance()
        val dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK)
        val hour = calendar.get(Calendar.HOUR_OF_DAY)
        val minute = calendar.get(Calendar.MINUTE)
        val currentTime = hour * 60 + minute // 转换为分钟
        
        // 如果是周末，计算到下周一的距离
        if (dayOfWeek == Calendar.SATURDAY) {
            return (24 * 60 - currentTime) + (24 * 60 * 1) + (9 * 60 + 30) // 到周一9:30
        } else if (dayOfWeek == Calendar.SUNDAY) {
            return (24 * 60 - currentTime) + (9 * 60 + 30) // 到周一9:30
        }
        
        // 工作日的情况
        val morningStart = 9 * 60 + 30 // 9:30
        val afternoonStart = 13 * 60 // 13:00
        val afternoonEnd = 15 * 60 // 15:00
        
        return when {
            currentTime < morningStart -> morningStart - currentTime // 上午开盘前
            currentTime in morningStart..(11 * 60 + 30) -> 0 // 上午交易中
            currentTime < afternoonStart -> afternoonStart - currentTime // 午休时间
            currentTime in afternoonStart..afternoonEnd -> 0 // 下午交易中
            else -> (24 * 60 - currentTime) + morningStart // 到明天上午
        }
    }
} 